home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Cross Platform / QuickTime 4.1.2 Windows SDK / CIncludes / StandardFile.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-12  |  15.3 KB  |  424 lines  |  [TEXT/R*ch]

  1. /*
  2.      File:        StandardFile.h
  3.  
  4.      Contains:    Standard File package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    QuickTime 4.1
  8.  
  9.      Copyright:    (c) 1990-1995, 1997-1999 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __STANDARDFILE__
  18. #define __STANDARDFILE__
  19.  
  20. #ifndef __MACTYPES__
  21.     #include <MacTypes.h>
  22. #endif
  23.  
  24. #ifndef __DIALOGS__
  25.     #include <Dialogs.h>
  26. #endif
  27.  
  28. #ifndef __FILES__
  29.     #include <Files.h>
  30. #endif
  31.  
  32.  
  33.  
  34.  
  35. #if PRAGMA_ONCE
  36. #pragma once
  37. #endif
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43. #if PRAGMA_IMPORT
  44. #pragma import on
  45. #endif
  46.  
  47. #if PRAGMA_STRUCT_ALIGN
  48.     #pragma options align=mac68k
  49. #elif PRAGMA_STRUCT_PACKPUSH
  50.     #pragma pack(push, 2)
  51. #elif PRAGMA_STRUCT_PACK
  52.     #pragma pack(2)
  53. #endif
  54.  
  55. enum {
  56.                                                                 /* resource IDs of pre-7.0 get and put dialogs */
  57.     putDlgID                    = -3999,
  58.     getDlgID                    = -4000
  59. };
  60.  
  61. enum {
  62.                                                                 /* item offsets of pre-7.0 get and put dialogs */
  63.     putSave                        = 1,
  64.     putCancel                    = 2,
  65.     putEject                    = 5,
  66.     putDrive                    = 6,
  67.     putName                        = 7,
  68.     getOpen                        = 1,
  69.     getCancel                    = 3,
  70.     getEject                    = 5,
  71.     getDrive                    = 6,
  72.     getNmList                    = 7,
  73.     getScroll                    = 8
  74. };
  75.  
  76. enum {
  77.                                                                 /* resource IDs of 7.0 get and put dialogs */
  78.     sfPutDialogID                = -6043,
  79.     sfGetDialogID                = -6042
  80. };
  81.  
  82. enum {
  83.                                                                 /* item offsets of 7.0 get and put dialogs */
  84.     sfItemOpenButton            = 1,
  85.     sfItemCancelButton            = 2,
  86.     sfItemBalloonHelp            = 3,
  87.     sfItemVolumeUser            = 4,
  88.     sfItemEjectButton            = 5,
  89.     sfItemDesktopButton            = 6,
  90.     sfItemFileListUser            = 7,
  91.     sfItemPopUpMenuUser            = 8,
  92.     sfItemDividerLinePict        = 9,
  93.     sfItemFileNameTextEdit        = 10,
  94.     sfItemPromptStaticText        = 11,
  95.     sfItemNewFolderUser            = 12
  96. };
  97.  
  98. enum {
  99.                                                                 /* pseudo-item hits for use in DlgHook */
  100.     sfHookFirstCall                = -1,
  101.     sfHookCharOffset            = 0x1000,
  102.     sfHookNullEvent                = 100,
  103.     sfHookRebuildList            = 101,
  104.     sfHookFolderPopUp            = 102,
  105.     sfHookOpenFolder            = 103,                            /* the following are only in system 7.0+ */
  106.     sfHookLastCall                = -2,
  107.     sfHookOpenAlias                = 104,
  108.     sfHookGoToDesktop            = 105,
  109.     sfHookGoToAliasTarget        = 106,
  110.     sfHookGoToParent            = 107,
  111.     sfHookGoToNextDrive            = 108,
  112.     sfHookGoToPrevDrive            = 109,
  113.     sfHookChangeSelection        = 110,
  114.     sfHookSetActiveOffset        = 200
  115. };
  116.  
  117.  
  118. /* the refcon field of the dialog record during a
  119.  modalfilter or dialoghook contains one of the following */
  120. enum {
  121.     sfMainDialogRefCon            = FOUR_CHAR_CODE('stdf'),
  122.     sfNewFolderDialogRefCon        = FOUR_CHAR_CODE('nfdr'),
  123.     sfReplaceDialogRefCon        = FOUR_CHAR_CODE('rplc'),
  124.     sfStatWarnDialogRefCon        = FOUR_CHAR_CODE('stat'),
  125.     sfLockWarnDialogRefCon        = FOUR_CHAR_CODE('lock'),
  126.     sfErrorDialogRefCon            = FOUR_CHAR_CODE('err ')
  127. };
  128.  
  129.  
  130.  
  131. struct SFReply {
  132.     Boolean                         good;
  133.     Boolean                         copy;
  134.     OSType                             fType;
  135.     short                             vRefNum;
  136.     short                             version;
  137.     StrFileName                     fName;                        /* a Str63 on MacOS */
  138. };
  139. typedef struct SFReply                    SFReply;
  140.  
  141. struct StandardFileReply {
  142.     Boolean                         sfGood;
  143.     Boolean                         sfReplacing;
  144.     OSType                             sfType;
  145.     FSSpec                             sfFile;
  146.     ScriptCode                         sfScript;
  147.     short                             sfFlags;
  148.     Boolean                         sfIsFolder;
  149.     Boolean                         sfIsVolume;
  150.     long                             sfReserved1;
  151.     short                             sfReserved2;
  152. };
  153. typedef struct StandardFileReply        StandardFileReply;
  154. /* for CustomXXXFile, ActivationOrderListPtr parameter is a pointer to an array of item numbers */
  155.  
  156. typedef const short *                    ActivationOrderListPtr;
  157. typedef CALLBACK_API( short , DlgHookProcPtr )(short item, DialogPtr theDialog);
  158. typedef CALLBACK_API( Boolean , FileFilterProcPtr )(CInfoPBPtr pb);
  159. /* the following also include an extra parameter of "your data pointer" */
  160. typedef CALLBACK_API( short , DlgHookYDProcPtr )(short item, DialogPtr theDialog, void *yourDataPtr);
  161. typedef CALLBACK_API( Boolean , ModalFilterYDProcPtr )(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, void *yourDataPtr);
  162. typedef CALLBACK_API( Boolean , FileFilterYDProcPtr )(CInfoPBPtr pb, void *yourDataPtr);
  163. typedef CALLBACK_API( void , ActivateYDProcPtr )(DialogPtr theDialog, short itemNo, Boolean activating, void *yourDataPtr);
  164. typedef STACK_UPP_TYPE(DlgHookProcPtr)                             DlgHookUPP;
  165. typedef STACK_UPP_TYPE(FileFilterProcPtr)                         FileFilterUPP;
  166. typedef STACK_UPP_TYPE(DlgHookYDProcPtr)                         DlgHookYDUPP;
  167. typedef STACK_UPP_TYPE(ModalFilterYDProcPtr)                     ModalFilterYDUPP;
  168. typedef STACK_UPP_TYPE(FileFilterYDProcPtr)                     FileFilterYDUPP;
  169. typedef STACK_UPP_TYPE(ActivateYDProcPtr)                         ActivateYDUPP;
  170. #if OPAQUE_UPP_TYPES
  171.     EXTERN_API(DlgHookUPP)
  172.     NewDlgHookUPP                   (DlgHookProcPtr            userRoutine);
  173.  
  174.     EXTERN_API(FileFilterUPP)
  175.     NewFileFilterUPP               (FileFilterProcPtr        userRoutine);
  176.  
  177.     EXTERN_API(DlgHookYDUPP)
  178.     NewDlgHookYDUPP                   (DlgHookYDProcPtr        userRoutine);
  179.  
  180.     EXTERN_API(ModalFilterYDUPP)
  181.     NewModalFilterYDUPP               (ModalFilterYDProcPtr    userRoutine);
  182.  
  183.     EXTERN_API(FileFilterYDUPP)
  184.     NewFileFilterYDUPP               (FileFilterYDProcPtr        userRoutine);
  185.  
  186.     EXTERN_API(ActivateYDUPP)
  187.     NewActivateYDUPP               (ActivateYDProcPtr        userRoutine);
  188.  
  189.     EXTERN_API(void)
  190.     DisposeDlgHookUPP               (DlgHookUPP                userUPP);
  191.  
  192.     EXTERN_API(void)
  193.     DisposeFileFilterUPP           (FileFilterUPP            userUPP);
  194.  
  195.     EXTERN_API(void)
  196.     DisposeDlgHookYDUPP               (DlgHookYDUPP            userUPP);
  197.  
  198.     EXTERN_API(void)
  199.     DisposeModalFilterYDUPP           (ModalFilterYDUPP        userUPP);
  200.  
  201.     EXTERN_API(void)
  202.     DisposeFileFilterYDUPP           (FileFilterYDUPP            userUPP);
  203.  
  204.     EXTERN_API(void)
  205.     DisposeActivateYDUPP           (ActivateYDUPP            userUPP);
  206.  
  207.     EXTERN_API(short)
  208.     InvokeDlgHookUPP               (short                    item,
  209.                                     DialogPtr                theDialog,
  210.                                     DlgHookUPP                userUPP);
  211.  
  212.     EXTERN_API(Boolean)
  213.     InvokeFileFilterUPP               (CInfoPBPtr                pb,
  214.                                     FileFilterUPP            userUPP);
  215.  
  216.     EXTERN_API(short)
  217.     InvokeDlgHookYDUPP               (short                    item,
  218.                                     DialogPtr                theDialog,
  219.                                     void *                    yourDataPtr,
  220.                                     DlgHookYDUPP            userUPP);
  221.  
  222.     EXTERN_API(Boolean)
  223.     InvokeModalFilterYDUPP           (DialogPtr                theDialog,
  224.                                     EventRecord *            theEvent,
  225.                                     short *                    itemHit,
  226.                                     void *                    yourDataPtr,
  227.                                     ModalFilterYDUPP        userUPP);
  228.  
  229.     EXTERN_API(Boolean)
  230.     InvokeFileFilterYDUPP           (CInfoPBPtr                pb,
  231.                                     void *                    yourDataPtr,
  232.                                     FileFilterYDUPP            userUPP);
  233.  
  234.     EXTERN_API(void)
  235.     InvokeActivateYDUPP               (DialogPtr                theDialog,
  236.                                     short                    itemNo,
  237.                                     Boolean                    activating,
  238.                                     void *                    yourDataPtr,
  239.                                     ActivateYDUPP            userUPP);
  240.  
  241. #else
  242.     enum { uppDlgHookProcInfo = 0x000003A0 };                         /* pascal 2_bytes Func(2_bytes, 4_bytes) */
  243.     enum { uppFileFilterProcInfo = 0x000000D0 };                     /* pascal 1_byte Func(4_bytes) */
  244.     enum { uppDlgHookYDProcInfo = 0x00000FA0 };                     /* pascal 2_bytes Func(2_bytes, 4_bytes, 4_bytes) */
  245.     enum { uppModalFilterYDProcInfo = 0x00003FD0 };                 /* pascal 1_byte Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  246.     enum { uppFileFilterYDProcInfo = 0x000003D0 };                     /* pascal 1_byte Func(4_bytes, 4_bytes) */
  247.     enum { uppActivateYDProcInfo = 0x000036C0 };                     /* pascal no_return_value Func(4_bytes, 2_bytes, 1_byte, 4_bytes) */
  248.     #define NewDlgHookUPP(userRoutine)                                 (DlgHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookProcInfo, GetCurrentArchitecture())
  249.     #define NewFileFilterUPP(userRoutine)                             (FileFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterProcInfo, GetCurrentArchitecture())
  250.     #define NewDlgHookYDUPP(userRoutine)                             (DlgHookYDUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookYDProcInfo, GetCurrentArchitecture())
  251.     #define NewModalFilterYDUPP(userRoutine)                         (ModalFilterYDUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppModalFilterYDProcInfo, GetCurrentArchitecture())
  252.     #define NewFileFilterYDUPP(userRoutine)                         (FileFilterYDUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterYDProcInfo, GetCurrentArchitecture())
  253.     #define NewActivateYDUPP(userRoutine)                             (ActivateYDUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppActivateYDProcInfo, GetCurrentArchitecture())
  254.     #define DisposeDlgHookUPP(userUPP)                                 DisposeRoutineDescriptor(userUPP)
  255.     #define DisposeFileFilterUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
  256.     #define DisposeDlgHookYDUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
  257.     #define DisposeModalFilterYDUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
  258.     #define DisposeFileFilterYDUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
  259.     #define DisposeActivateYDUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
  260.     #define InvokeDlgHookUPP(item, theDialog, userUPP)                 (short)CALL_TWO_PARAMETER_UPP((userUPP), uppDlgHookProcInfo, (item), (theDialog))
  261.     #define InvokeFileFilterUPP(pb, userUPP)                         (Boolean)CALL_ONE_PARAMETER_UPP((userUPP), uppFileFilterProcInfo, (pb))
  262.     #define InvokeDlgHookYDUPP(item, theDialog, yourDataPtr, userUPP)  (short)CALL_THREE_PARAMETER_UPP((userUPP), uppDlgHookYDProcInfo, (item), (theDialog), (yourDataPtr))
  263.     #define InvokeModalFilterYDUPP(theDialog, theEvent, itemHit, yourDataPtr, userUPP)  (Boolean)CALL_FOUR_PARAMETER_UPP((userUPP), uppModalFilterYDProcInfo, (theDialog), (theEvent), (itemHit), (yourDataPtr))
  264.     #define InvokeFileFilterYDUPP(pb, yourDataPtr, userUPP)         (Boolean)CALL_TWO_PARAMETER_UPP((userUPP), uppFileFilterYDProcInfo, (pb), (yourDataPtr))
  265.     #define InvokeActivateYDUPP(theDialog, itemNo, activating, yourDataPtr, userUPP)  CALL_FOUR_PARAMETER_UPP((userUPP), uppActivateYDProcInfo, (theDialog), (itemNo), (activating), (yourDataPtr))
  266. #endif
  267. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  268. #define NewDlgHookProc(userRoutine)                             NewDlgHookUPP(userRoutine)
  269. #define NewFileFilterProc(userRoutine)                             NewFileFilterUPP(userRoutine)
  270. #define NewDlgHookYDProc(userRoutine)                             NewDlgHookYDUPP(userRoutine)
  271. #define NewModalFilterYDProc(userRoutine)                         NewModalFilterYDUPP(userRoutine)
  272. #define NewFileFilterYDProc(userRoutine)                         NewFileFilterYDUPP(userRoutine)
  273. #define NewActivateYDProc(userRoutine)                             NewActivateYDUPP(userRoutine)
  274. #define CallDlgHookProc(userRoutine, item, theDialog)            InvokeDlgHookUPP(item, theDialog, userRoutine)
  275. #define CallFileFilterProc(userRoutine, pb)                        InvokeFileFilterUPP(pb, userRoutine)
  276. #define CallDlgHookYDProc(userRoutine, item, theDialog, yourDataPtr) InvokeDlgHookYDUPP(item, theDialog, yourDataPtr, userRoutine)
  277. #define CallModalFilterYDProc(userRoutine, theDialog, theEvent, itemHit, yourDataPtr) InvokeModalFilterYDUPP(theDialog, theEvent, itemHit, yourDataPtr, userRoutine)
  278. #define CallFileFilterYDProc(userRoutine, pb, yourDataPtr)        InvokeFileFilterYDUPP(pb, yourDataPtr, userRoutine)
  279. #define CallActivateYDProc(userRoutine, theDialog, itemNo, activating, yourDataPtr) InvokeActivateYDUPP(theDialog, itemNo, activating, yourDataPtr, userRoutine)
  280. typedef OSType                             SFTypeList[4];
  281. /*
  282.     The GetFile "typeList" parameter type has changed from "SFTypeList" to "ConstSFTypeListPtr".
  283.     For C, this will add "const" and make it an in-only parameter.
  284.     For Pascal, this will require client code to use the @ operator, but make it easier to specify long lists.
  285.  
  286.     ConstSFTypeListPtr is a pointer to an array of OSTypes.
  287. */
  288. typedef const OSType *                    ConstSFTypeListPtr;
  289. #if CALL_NOT_IN_CARBON
  290. EXTERN_API( void )
  291. SFPutFile                        (Point                     where,
  292.                                  ConstStr255Param         prompt, /* can be NULL */
  293.                                  ConstStr255Param         origName,
  294.                                  DlgHookUPP             dlgHook, /* can be NULL */
  295.                                  SFReply *                reply)                                THREEWORDINLINE(0x3F3C, 0x0001, 0xA9EA);
  296.  
  297. EXTERN_API( void )
  298. SFGetFile                        (Point                     where,
  299.                                  ConstStr255Param         prompt,
  300.                                  FileFilterUPP             fileFilter, /* can be NULL */
  301.                                  short                     numTypes,
  302.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  303.                                  DlgHookUPP             dlgHook, /* can be NULL */
  304.                                  SFReply *                reply)                                THREEWORDINLINE(0x3F3C, 0x0002, 0xA9EA);
  305.  
  306. EXTERN_API( void )
  307. SFPPutFile                        (Point                     where,
  308.                                  ConstStr255Param         prompt, /* can be NULL */
  309.                                  ConstStr255Param         origName,
  310.                                  DlgHookUPP             dlgHook,
  311.                                  SFReply *                reply,
  312.                                  short                     dlgID,
  313.                                  ModalFilterUPP         filterProc) /* can be NULL */        THREEWORDINLINE(0x3F3C, 0x0003, 0xA9EA);
  314.  
  315. EXTERN_API( void )
  316. SFPGetFile                        (Point                     where,
  317.                                  ConstStr255Param         prompt,
  318.                                  FileFilterUPP             fileFilter, /* can be NULL */
  319.                                  short                     numTypes,
  320.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  321.                                  DlgHookUPP             dlgHook, /* can be NULL */
  322.                                  SFReply *                reply,
  323.                                  short                     dlgID,
  324.                                  ModalFilterUPP         filterProc) /* can be NULL */        THREEWORDINLINE(0x3F3C, 0x0004, 0xA9EA);
  325.  
  326. EXTERN_API( void )
  327. StandardPutFile                    (ConstStr255Param         prompt, /* can be NULL */
  328.                                  ConstStr255Param         defaultName,
  329.                                  StandardFileReply *    reply)                                THREEWORDINLINE(0x3F3C, 0x0005, 0xA9EA);
  330.  
  331. EXTERN_API( void )
  332. StandardGetFile                    (FileFilterUPP             fileFilter, /* can be NULL */
  333.                                  short                     numTypes,
  334.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  335.                                  StandardFileReply *    reply)                                THREEWORDINLINE(0x3F3C, 0x0006, 0xA9EA);
  336.  
  337. EXTERN_API( void )
  338. CustomPutFile                    (ConstStr255Param         prompt, /* can be NULL */
  339.                                  ConstStr255Param         defaultName,
  340.                                  StandardFileReply *    reply,
  341.                                  short                     dlgID,
  342.                                  Point                     where,
  343.                                  DlgHookYDUPP             dlgHook, /* can be NULL */
  344.                                  ModalFilterYDUPP         filterProc, /* can be NULL */
  345.                                  ActivationOrderListPtr  activeList, /* can be NULL */
  346.                                  ActivateYDUPP             activate, /* can be NULL */
  347.                                  void *                    yourDataPtr)                        THREEWORDINLINE(0x3F3C, 0x0007, 0xA9EA);
  348.  
  349. EXTERN_API( void )
  350. CustomGetFile                    (FileFilterYDUPP         fileFilter, /* can be NULL */
  351.                                  short                     numTypes,
  352.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  353.                                  StandardFileReply *    reply,
  354.                                  short                     dlgID,
  355.                                  Point                     where,
  356.                                  DlgHookYDUPP             dlgHook, /* can be NULL */
  357.                                  ModalFilterYDUPP         filterProc, /* can be NULL */
  358.                                  ActivationOrderListPtr  activeList, /* can be NULL */
  359.                                  ActivateYDUPP             activate, /* can be NULL */
  360.                                  void *                    yourDataPtr)                        THREEWORDINLINE(0x3F3C, 0x0008, 0xA9EA);
  361.  
  362. EXTERN_API( OSErr )
  363. StandardOpenDialog                (StandardFileReply *    reply);
  364.  
  365. EXTERN_API_C( void )
  366. sfpputfile                        (Point *                where,
  367.                                  const char *            prompt,
  368.                                  const char *            origName,
  369.                                  DlgHookUPP             dlgHook, /* can be NULL */
  370.                                  SFReply *                reply,
  371.                                  short                     dlgID,
  372.                                  ModalFilterUPP         filterProc) /* can be NULL */;
  373.  
  374. EXTERN_API_C( void )
  375. sfgetfile                        (Point *                where,
  376.                                  const char *            prompt,
  377.                                  FileFilterUPP             fileFilter, /* can be NULL */
  378.                                  short                     numTypes,
  379.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  380.                                  DlgHookUPP             dlgHook, /* can be NULL */
  381.                                  SFReply *                reply);
  382.  
  383. EXTERN_API_C( void )
  384. sfpgetfile                        (Point *                where,
  385.                                  const char *            prompt,
  386.                                  FileFilterUPP             fileFilter, /* can be NULL */
  387.                                  short                     numTypes,
  388.                                  ConstSFTypeListPtr     typeList, /* can be NULL */
  389.                                  DlgHookUPP             dlgHook, /* can be NULL */
  390.                                  SFReply *                reply,
  391.                                  short                     dlgID,
  392.                                  ModalFilterUPP         filterProc) /* can be NULL */;
  393.  
  394. EXTERN_API_C( void )
  395. sfputfile                        (Point *                where,
  396.                                  const char *            prompt,
  397.                                  const char *            origName,
  398.                                  DlgHookUPP             dlgHook, /* can be NULL */
  399.                                  SFReply *                reply);
  400.  
  401. #endif  /* CALL_NOT_IN_CARBON */
  402.  
  403.  
  404. #if PRAGMA_STRUCT_ALIGN
  405.     #pragma options align=reset
  406. #elif PRAGMA_STRUCT_PACKPUSH
  407.     #pragma pack(pop)
  408. #elif PRAGMA_STRUCT_PACK
  409.     #pragma pack()
  410. #endif
  411.  
  412. #ifdef PRAGMA_IMPORT_OFF
  413. #pragma import off
  414. #elif PRAGMA_IMPORT
  415. #pragma import reset
  416. #endif
  417.  
  418. #ifdef __cplusplus
  419. }
  420. #endif
  421.  
  422. #endif /* __STANDARDFILE__ */
  423.  
  424.